/*****************************************************************************
 *   Copyright (C) 2008 John Schember <john@nachtimwald.com>                 *
 *                                                                           *
 *   This file is part of niwbillmanager.                                    *
 *                                                                           *
 *   niwbillmanager is free software: you can redistribute it and/or         *
 *   modify it under the terms of the GNU General Public License as          *
 *   published by the Free Software Foundation, either version 3 of the      *
 *   License, or (at your option) any later version.                         *
 *                                                                           *
 *   niwbillmanager is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of          *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the            *
 *   GNU General Public License for more details.                            *
 *                                                                           *
 *   You should have received a copy of the GNU General Public License       *
 *   along with niwbillmanager. If not, see                                  *
 *   <http://www.gnu.org/licenses/>.                                         *
 *****************************************************************************/

#ifndef REPORTS_H
#define REPORTS_H

#include "reportoptions.h"
#include "../qt4uiplugininterface.h"

class Reports : public Qt4UiPluginInterface
{
    Q_OBJECT
    Q_INTERFACES(Qt4UiPluginInterface)

    public:
        Reports();
        ~Reports();

        void setLib(NiwBillManager *lib=0);
        QAction *getAction();
        QString getName();
        QString getCredits();
        QString getDescription();
        QString getVersion();
        QString getLicense();
        /**
         * This plugin is configured when run.
         */
        bool canConfig();
        void execConfigDialog();

    signals:
        void uiUpdate();
        void billItemsChange();
        void tagsChange();
        void undoRedoUpdate();

    public slots:
        void on_actionRun_triggered();

    private:
        /**
         * Checks to see if the options allow for a report to be generated.
         * This only checks the options themsevles. It does not check if the
         * options specified will match any bills. For instance, if neither
         * paid nor unpaid bill are included all bills will be excluded.
         * @param options The options to be used with generating the report.
         * @return True if a report can be generated from the given options.
         */
        bool checkOptions(const ReportOptions &options);
        /**
         * Checks if the list of dates is not empty.
         * @param dates The dates to generate a report for.
         * @return Ture if there are dates so a report can be generated.
         */
        bool checkDates(const QList<QDate> &dates);

        QAction *m_actionRun;
        NiwBillManager *m_lib;
        ReportOptions *m_options;
};

#endif /* REPORTS_H */
